import { _ as _export_sfc, m as mpMixin, a as mixin, c as createBlock, e as createCommentVNode, o as openBlock, w as withCtx, i as index$g, n as normalizeStyle, f as normalizeClass, g as createElementBlock, F as Fragment, h as renderList, s as index$i, t as createTextVNode, u as toDisplayString, ak as getCurrentPages$1, aM as colorGradient } from './index-Cc4oxzDN.js';

const props = {
	props: {
		// 是否显示组件
		show: {
			type: Boolean,
			default: true
		},
		// 颜色
		color: {
			type: String,
			default: '#909193'
		},
		// 提示文字颜色
		textColor: {
			type: String,
			default: '#909193'
		},
		// 文字和图标是否垂直排列
		vertical: {
			type: Boolean,
			default: false
		},
		// 模式选择，circle-圆形，spinner-花朵形，semicircle-半圆形
		mode: {
			type: String,
			default: 'spinner'
		},
		// 图标大小，单位默认px
		size: {
			type: [String, Number],
			default: 24
		},
		// 文字大小
		textSize: {
			type: [String, Number],
			default: 15
		},
		// 文字样式
		textStyle: {
			type: Object,
			default () {
				return {}
			}
		},
		// 文字内容
		text: {
			type: [String, Number],
			default: ''
		},
		// 动画模式 https://www.runoob.com/cssref/css3-pr-animation-timing-function.html
		timingFunction: {
			type: String,
			default: 'linear'
		},
		// 动画执行周期时间
		duration: {
			type: [String, Number],
			default: 1200
		},
		// mode=circle时的暗边颜色
		inactiveColor: {
			type: String,
			default: ''
		},
		...uni.$uv?.props?.loadingIcon
	}
};

/**
	 * loading 加载动画
	 * @description 警此组件为一个小动画，目前用在uvui的loadmore加载更多和switch开关等组件的正在加载状态场景。
	 * @tutorial https://www.uvui.cn/components/loading.html
	 * @property {Boolean}			show			是否显示组件  (默认 true)
	 * @property {String}			color			动画活动区域的颜色，只对 mode = flower 模式有效（默认#909193）
	 * @property {String}			textColor		提示文本的颜色（默认#909193）
	 * @property {Boolean}			vertical		文字和图标是否垂直排列 (默认 false )
	 * @property {String}			mode			模式选择，见官网说明（默认 'circle' ）
	 * @property {String | Number}	size			加载图标的大小，单位px （默认 24 ）
	 * @property {String | Number}	textSize		文字大小（默认 15 ）
	 * @property {String | Number}	text			文字内容 
	 * @property {Object}	textStyle 文字样式
	 * @property {String}			timingFunction	动画模式 （默认 'ease-in-out' ）
	 * @property {String | Number}	duration		动画执行周期时间（默认 1200）
	 * @property {String}			inactiveColor	mode=circle时的暗边颜色 
	 * @property {Object}			customStyle		定义需要用到的外部样式
	 * @example <uv-loading mode="circle"></uv-loading>
	 */
	const _sfc_main = {
		name: 'uv-loading-icon',
		mixins: [mpMixin, mixin, props],
		data() {
			return {
				// Array.form可以通过一个伪数组对象创建指定长度的数组
				// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from
				array12: Array.from({
					length: 12
				}),
				// 这里需要设置默认值为360，否则在安卓nvue上，会延迟一个duration周期后才执行
				// 在iOS nvue上，则会一开始默认执行两个周期的动画
				aniAngel: 360, // 动画旋转角度
				webviewHide: false, // 监听webview的状态，如果隐藏了页面，则停止动画，以免性能消耗
				loading: false, // 是否运行中，针对nvue使用
			}
		},
		computed: {
			// 当为circle类型时，给其另外三边设置一个更轻一些的颜色
			// 之所以需要这么做的原因是，比如父组件传了color为红色，那么需要另外的三个边为浅红色
			// 而不能是固定的某一个其他颜色(因为这个固定的颜色可能浅蓝，导致效果没有那么细腻良好)
			otherBorderColor() {
				const lightColor = colorGradient(this.color, '#ffffff', 100)[80];
				if (this.mode === 'circle') {
					return this.inactiveColor ? this.inactiveColor : lightColor
				} else {
					return 'transparent'
				}
			}
		},
		watch: {
			show(n) {
				// nvue中，show为true，且为非loading状态，就重新执行动画模块







			}
		},
		mounted() {
			this.init();
		},
		methods: {
			init() {
				setTimeout(() => {






				}, 20);
			},
			// 监听webview的显示与隐藏
			addEventListenerToWebview() {
				// webview的堆栈
				const pages = getCurrentPages$1();
				// 当前页面
				const page = pages[pages.length - 1];
				// 当前页面的webview实例
				const currentWebview = page.$getAppWebview();
				// 监听webview的显示与隐藏，从而停止或者开始动画(为了性能)
				currentWebview.addEventListener('hide', () => {
					this.webviewHide = true;
				});
				currentWebview.addEventListener('show', () => {
					this.webviewHide = false;
				});
			},





























		}
	};

function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  const _component_v_uni_view = index$g;
  const _component_v_uni_text = index$i;

  return (_ctx.show)
    ? (openBlock(), createBlock(_component_v_uni_view, {
        key: 0,
        class: normalizeClass(["uv-loading-icon", [_ctx.vertical && 'uv-loading-icon--vertical']]),
        style: normalizeStyle([_ctx.$uv.addStyle(_ctx.customStyle)])
      }, {
        default: withCtx(() => [
          (!$data.webviewHide)
            ? (openBlock(), createBlock(_component_v_uni_view, {
                key: 0,
                class: normalizeClass(["uv-loading-icon__spinner", [`uv-loading-icon__spinner--${_ctx.mode}`]]),
                ref: "ani",
                style: normalizeStyle({
				color: _ctx.color,
				width: _ctx.$uv.addUnit(_ctx.size),
				height: _ctx.$uv.addUnit(_ctx.size),
				borderTopColor: _ctx.color,
				borderBottomColor: $options.otherBorderColor,
				borderLeftColor: $options.otherBorderColor,
				borderRightColor: $options.otherBorderColor,
				'animation-duration': `${_ctx.duration}ms`,
				'animation-timing-function': _ctx.mode === 'semicircle' || _ctx.mode === 'circle' ? _ctx.timingFunction : ''
			})
              }, {
                default: withCtx(() => [
                  (_ctx.mode === 'spinner')
                    ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList($data.array12, (item, index) => {
                        return (openBlock(), createBlock(_component_v_uni_view, {
                          key: index,
                          class: "uv-loading-icon__dot"
                        }))
                      }), 128))
                    : createCommentVNode("", true)
                ]),
                _: 1
              }, 8, ["class", "style"]))
            : createCommentVNode("", true),
          (_ctx.text)
            ? (openBlock(), createBlock(_component_v_uni_text, {
                key: 1,
                class: "uv-loading-icon__text",
                style: normalizeStyle([{
				fontSize: _ctx.$uv.addUnit(_ctx.textSize),
				color: _ctx.textColor,
			},_ctx.$uv.addStyle(_ctx.textStyle)])
              }, {
                default: withCtx(() => [
                  createTextVNode(toDisplayString(_ctx.text), 1)
                ]),
                _: 1
              }, 8, ["style"]))
            : createCommentVNode("", true)
        ]),
        _: 1
      }, 8, ["style", "class"]))
    : createCommentVNode("", true)
}
const __easycom_1 = /*#__PURE__*/_export_sfc(_sfc_main, [['render',_sfc_render],['__scopeId',"data-v-d9c6b36a"]]);

export { __easycom_1 as _ };
